package 简单.哈希表;

import java.util.HashSet;
import java.util.Set;

/**
 * 给你一个由英文字母组成的字符串 s ，请你找出并返回 s 中的 最好 英文字母。
 * 返回的字母必须为大写形式。如果不存在满足条件的字母，则返回一个空字符串。
 * 最好 英文字母的大写和小写形式必须 都 在 s 中出现。
 * 英文字母 b 比另一个英文字母 a 更好 的前提是：英文字母表中，b 在 a 之 后 出现。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case
 */
public class 兼具大小写的最好英文字母_2309 {

    public static void main(String[] args) {

        System.out.println('A' - 'a');
        System.out.println('B' - 'b');
        System.out.println((char) ('a' - 32));

    }

    public String greatestLetter(String s) {
        String ans = "";
        Set<Character> set = new HashSet<>();

        for (char c : s.toCharArray()) {
            if (set.contains((char) (c - 32)) ||
                    set.contains((char) (c + 32))) {
                c &= -33;
                String upper = String.valueOf(c);
                if (ans == "") {
                    ans = upper;
                } else if (upper.charAt(0) > ans.charAt(0)) {
                    ans = upper;
                }

            }
            set.add(c);
        }

        return ans;
    }

}
